<html>
    <head>
        <title>如何对字符串进行加密</title>
    </head>
    <body>
        <script>
             /*
                    二、使用字符串加密

                            1、如何加密和解密：

                                        所有加密操作都包含在IStringEncryptionService中。你可以注入它并开始使用。

                                        例如：

                                                public class MyService : DomainService
                                                {
                                                    protected IStringEncryptionService StringEncryptionService { get; }

                                                    public MyService(IStringEncryptionService stringEncryptionService)
                                                    {
                                                        StringEncryptionService = stringEncryptionService;
                                                    }

                                                    public string Encrypt(string value)
                                                    {
                                                        // 对字符串值进行加密
                                                        return StringEncryptionService.Encrypt(value);
                                                    }

                                                    public string Decrypt(string value)
                                                    {
                                                        // 对字符串值进行解密
                                                        return StringEncryptionService.Decrypt(value);
                                                    }
                                                }

                            2、使用自定义密码：

                                        IStringEncryptionService方法具有默认值的passPharase参数，当你不传递passPhrase参数时，它使用默认PassPhrase

                                                // 默认传递 "Phrase"
                                                var encryptedValue = StringEncryptionService.Encrypt(value);

                                                // 自定义密码 
                                                var encryptedValue = StringEncryptionService.Encrypt(value, "MyCustomPassPhrase");

                                                // 加密和解密拥有相同的密码
                                                var decryptedValue = StringEncryptionService.Decrypt(value, "MyCustomPassPhrase");


                            3、自定义加密盐 Using Custom Salt 

                                        IStringEncryptionService方法具有默认值的盐参数，当你不传递参数时，它使用默认盐：

                                                // 默认传递 "Salt"  为盐参数值
                                                var encryptedValue = StringEncryptionService.Encrypt(value);

                                                // 自定义盐参数值
                                                var encryptedValue = StringEncryptionService.Encrypt(value, salt: Encoding.UTF8.GetBytes("MyCustomSalt")); 

                                                // 加密和解密的盐参数值相同
                                                var decryptedValue = StringEncryptionService.Decrypt(value,  salt: Encoding.UTF8.GetBytes("MyCustomSalt"));


                                        ★、加密技术中Salt的概念：

                                                概念                  作用                                          典型使用场景

                                                Salt            随机数据，用于与密码结合形成密钥，防止彩虹表攻击。      密码哈希存储

                                                PassPhrase      用户自定义密钥，作为加密算法的输入之一                 加密敏感数据 (如数据库连接字符串)
                */
        </script>
    </body>
</html>